package com.localking.algorithm.leetcode.array

/**
 * In a given integer array nums, there is always exactly one largest element.
 * Fine whether the largest element in the array is at least twice as much as every other number in the array.
 * If it is, return the index of the largest element, otherwise return -1.
 *
 * Example 1:
 * Input: nums = [3, 6, 1, 0]
 * Output: 1
 * Explanation: 6 is the largest integer, and for every other number in the array x,
 * 6 is more than twice as big as x. the index of value 6 is 1, so we return 1.
 *
 * Example 2:
 * Input: nums = [1, 2, 3, 4]
 * Output: -1
 * Explanation: 4 isn't at least as big as twice the value of 3, so we return -1.
 *
 * Note:
 * 1. nums will have a length in the range [1, 50].
 * 2. Every nums[i] will be an integer in the range [0, 99]
 *
 * @author jinbo
 */
object DominantIndex_747 {
  def main(args: Array[String]): Unit = {
    val nums: Array[Int] = Array(0, 1)
    println(dominantIndex(nums))
  }

  def dominantIndex(nums: Array[Int]): Int = {
    if(nums.length == 1) {
      return 0
    }
    var largestNumIndex: Int = 0
    var secondNumIndex: Int = 1
    if(nums(largestNumIndex) < nums(secondNumIndex)) {
      val temp: Int = largestNumIndex
      largestNumIndex = secondNumIndex
      secondNumIndex = temp
    }
    for(i <- 2 until nums.length) {
      if(nums(i) > nums(largestNumIndex)) {
        secondNumIndex = largestNumIndex
        largestNumIndex = i
      } else if(nums(i) > nums(secondNumIndex)) {
        secondNumIndex = i
      }
    }
    if(nums(secondNumIndex) * 2 <= nums(largestNumIndex)) {
      return largestNumIndex
    }
    -1
  }
}
